// @flow
function sum(a: number, b: number) {
  // // 对于强类型来说没比要的代码!
  // if (typeof a !== "number" || typeof b !== "number") {
  //     throw new TypeError("arguments must be a number");
  // }
  return a + b
}
sum(100, 100)
sum('100', '100')

// 没有返回值的函数需要标记为
function boo(): void {
  return 100
}

// 或类型
const type: 'success' | 'warning' | 'danger' = 'success'
const h: string | number = 'string'

// maybe ?
// null undefined 也可
// ?number相当于 number | null | void
const gender: ?number = null

// mixed和any
function anytest(s: any) {
  return s.substr(0, 1)
}
// 使用any时，可以传入任意类型的值，虽然数字可能不存在substr方法，但是检查时不会报错
anytest(1)

function mixedtest(s: mixed) {
  // 使用mixed时，当这么直接调用substr就会报错，因为可能传入number类型。
  // return s.substr(0, 1)
  // 此时需要判断参数类型
  if (typeof s === 'string') {
    return s.substr(0, 1)
  }
}
mixedtest(1)
